﻿#define DEBUG
using System;
//4.15 预处理指令
//预处理指令向编译器提供关于代码范围的额外信息。
//最常用的预处理指令是条件指令，它提供了一种将某些代码加入或排除出编译范围的方法。例如：

class MyClass
{
    int x;
    void Foo()
    {
#if DEBUG
        Console.WriteLine("Testing: x = {0}", x);
#endif
    }
}
//在这个类中，Foo语句是根据DEBUG符号的出现而有选择地进行编译。如果删除DEBUG符号，那么这条语句无法编译。
//预处理符号可以定义在源代码中（如上例），然后它们会通过命令行选项/define:symbol传递给编译器。

//通过#if和#elif指令，可以使用||、&&和 ! 运算符在多个符号上执行或、与、非操作。
//下面的指令会指示编译器当定义了TESTMODE符号而未定义DEBUG符号时执行后面的代码：
//#if TESTMODE && !DEBUG
//然而，一定要记住你不是在开发普通的C#表达式，并且你所操作的符号与变量是毫无关系的——不管是静态或是动态的。
//#error和#warning符号会要求编译器在遇到一些不符合要求的编译符号时产生一条警告或错误信息，从而防止出现条件指令的偶然误用。
//表4-1列出了预处理指令

//表4-1：预处理指令
// 预处理指令                            操作
// #define 符号                           定义一个符号
// #undef 符号                            取消一个符号定义
// #if 符号[运算符 符号2]                  判断符号：运算符可以时==、!=、&&和||，后面跟#else、#elif和#endif
// #else                                    执行到下一个#endif之前的代码
// #elif 符号[运算符 符号2]                组合#else分支和#if判断
// #endif                                   结束条件指令
// #warning文本                           显示在编译器输出中的警告文本
// #error文本                             显示在编译器输出中的错误文本
// #pragma warning [disable | restore]      Disables/restores compiler warning(s)
// #line [数字["file"]|hidden]             数字指定源代码的行号；file是计算机输出的文件名 hidden指示调试器忽略从这里开始到下一个#line指令的代码
// #region名称                                标记一个大纲开始位置
// #endregion区域                             结束一个大纲区域

namespace _148_预处理指令
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}